﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MengLin.OOP.DesignPattern.TemplateMethod.Interest
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 普通方法
            //{
            //    {
            //        GeneralMethod generalMethod = new GeneralMethod();
            //        generalMethod.Show();
            //    }

            //    {
            //        //普通方法-编译时就决定调用左边，使用左边
            //        GeneralMethod generalMethod = new ChildGeneralMethod();
            //        generalMethod.Show();
            //    }

            //    {
            //        ChildGeneralMethod childGeneralMethod = new ChildGeneralMethod();
            //        childGeneralMethod.Show();
            //    }
            //}
            #endregion

            #region 抽象方法
            //{
            //    //抽象类不能实例化
            //    //{
            //    //    AbstractMethod generalMethod = new AbstractMethod();
            //    //    generalMethod.Show();
            //    //}

            //    {
            //        //抽象方法-运行时就决定调用右边，使用右边
            //        AbstractMethod abstractMethod = new ChildAbstractMethod();
            //        abstractMethod.Show();
            //    }

            //    {
            //        ChildAbstractMethod childAbstractMethod = new ChildAbstractMethod();
            //        childAbstractMethod.Show();
            //    }
            //}
            #endregion

            #region 虚方法
            //{
            //    {
            //        VirtualMethod virtualMethod = new VirtualMethod();
            //        virtualMethod.Show();
            //    }

            //    {
            //        //虚方法--运行时就决定调用右边，使用右边
            //        VirtualMethod virtualMethod = new ChildVirtualMethod();
            //        virtualMethod.Show();
            //    }

            //    {
            //        ChildVirtualMethod childVirtualMethod = new ChildVirtualMethod();
            //        childVirtualMethod.Show();
            //    }
            //}
            #endregion

            #region 场景应用-不同的用户计算利息的公式不同
            {
                //左边声明BaseUser，右边实例化活期用户
                BaseUser baseUser = new CurrentUser();
                baseUser.QueryInterest(123, "张三", "123456");
            }
            {
                //左边声明BaseUser，右边实例化定期用户
                BaseUser baseUser = new RegularUser();
                baseUser.QueryInterest(234, "李四", "123456");
            }
            {
                //左边声明BaseUser，右边实例化理财用户
                BaseUser baseUser = new VipUser();
                baseUser.QueryInterest(345, "王五", "123456");
            }
            #endregion

            Console.ReadLine();
        }
    }
}
